﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TCC_Hotel.Entidades;
using TCC_Hotel.Serviços.BDServices;
using System.Drawing;

namespace TCC_Hotel.Apresentacao.Produtos
{
    public partial class ListarProdutos : System.Web.UI.Page
    {

        List<Produto> produtos = null;
        ProdutoService servico = new ProdutoService();
        LoginService servico_Login = new LoginService();

        /// <summary>
        /// Carregamento da página
        /// </summary>
        protected void Page_Load(object sender, EventArgs e)
        {
            //Recupera o usuario corrente
            string usuario = Request.ServerVariables["AUTH_USER"].ToString();
            
            //Verifica permissao ao acesso da página
            if (!servico_Login.RecuperarPermissaoCache(usuario).Listar_Produtos)
            {
                //Redireciona para a pagina inicial
                Response.Redirect("~/");
            }

            //Verifica permissao ao acesso da página
            if (!servico_Login.RecuperarPermissaoCache(usuario).Cadastrar_Produtos)
            {
                //Redireciona para a pagina inicial
                btnCadastrar.Visible = false;


                //tira as colunas nao permitida do usuario
                for (int i = 0; i < grdProdutoTotais.Columns.Count; i++)
                {
                    if (grdProdutoTotais.Columns[i].AccessibleHeaderText == "Editar" || grdProdutoTotais.Columns[i].AccessibleHeaderText == "Excluir")
                    {
                        grdProdutoTotais.Columns[i].Visible = false;
                    }
                }
            }

            if (!IsPostBack)
            {
                //recupera todos os produtos do banco de dados          
                ReloadGridView();
            }
        }

        /// <summary>
        /// Evento de click em algum dos botões 
        /// </summary>
        protected void grdProdutoTotais_RowCommand(object sender, GridViewCommandEventArgs e)
        {

            //Verifica qual o botão que o usuário clicou
            if (e.CommandName == "detalharProduto")
            {

                //Redireciona para a pagina de detalhes correspondente com o CPF como parametro
                Response.Redirect("~/Apresentacao/Produtos/DetalhesProduto.aspx?id=" + grdProdutoTotais.Rows[Convert.ToInt16(e.CommandArgument)].Cells[0].Text);



            }
            else if (e.CommandName == "editarProduto")
            {
                //Redireciona para a pagina de editar correspondente com o CPF como parametro
                Response.Redirect("~/Apresentacao/Produtos/EditarProduto.aspx?id=" + grdProdutoTotais.Rows[Convert.ToInt16(e.CommandArgument)].Cells[0].Text);


            }
            else if (e.CommandName == "excluirProduto")
            {
                string id = grdProdutoTotais.Rows[Convert.ToInt16(e.CommandArgument)].Cells[0].Text;

                //chama o servico que exclui o produto do hotel e verifica se o produto foi excluido
                if (servico.ExcluirProduto(Convert.ToInt32(id)))
                {
                    //Remove o cache para atualizar informação
                    HttpContext.Current.Cache.Remove("Lista_Produtos");
                    MensagemJS("Produto excluído com sucesso!");
                }
                else
                {
                    MensagemJS("Ocorreu um erro e o produto não foi excluído!");
                }
                //Faz o reload da pagina para não perder os valores do "desligar"
                ReloadGridView();
            }


        }

        /// <summary>
        /// Evento do botão de filtrar os nomes para facilitar a busca
        /// </summary>
        protected void btnBusca_Click(object sender, EventArgs e)
        {
            ReloadGridView();
        }

        /// <summary>
        /// Limpa a busca
        /// </summary>
        protected void btnLimpar_Click(object sender, EventArgs e)
        {
            txtBusca.Text = null;
            ReloadGridView();
        }

        /// <summary>
        /// Evento que controla a paginação e verifica o cache
        /// </summary>
        protected void grdProdutoTotais_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {

            //Consulta os funcionarios no banco
            produtos = servico.ListarProdutosCache();
            produtos = produtos.Where(i => i.NomeProduto.ToUpper().Contains(txtBusca.Text.ToUpper())).ToList();
           

            //Na mudança de pagina, chama o evento de aparecer a lista
            grdProdutoTotais.PageIndex = e.NewPageIndex;
            grdProdutoTotais.DataSource = produtos;
            grdProdutoTotais.DataBind();
        }

        /// <summary>
        /// Faz o reload do gridview quando necessário e consulta o cache
        /// </summary>
        private void ReloadGridView()
        {
            //Consulta os Produtos no serviço. Nele será verificado o cache
            produtos = servico.ListarProdutosCache();

            produtos = produtos.Where(i => i.NomeProduto.ToUpper().Contains(txtBusca.Text.ToUpper())).ToList();
          
            //popular gridView
            grdProdutoTotais.DataSource = produtos;
            grdProdutoTotais.DataBind();
        }

        /// <summary>
        /// Lança um popup em javaScript com alguma mensagem
        /// </summary>
        /// <param name="msg">Mensagem do popup</param>
        public void MensagemJS(string msg)
        {
            //Formata um alert para o usuário
            Page.ClientScript.RegisterStartupScript(

                     this.GetType(),

                     "error",

                     "$(window).load(function(){alert('" + msg + "')});",

                     true);

        }

        /// <summary>
        /// Evento do botão de cadastrar que chama a tela de cadastro
        /// </summary>
        protected void btnCadastrar_Click(object sender, EventArgs e)
        {
            //Redireciona para a pagina de cadastro
            Response.Redirect("~/Apresentacao/Produtos/CadastrarProduto.aspx");

        }

        /// <summary>
        /// Evento chamado a cada nova linha criada.
        /// </summary>
        protected void grdProdutoTotais_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string produto = (DataBinder.Eval(e.Row.DataItem, "NomeProduto")).ToString();
                ((LinkButton)e.Row.Cells[6].Controls[0]).OnClientClick = "return confirm('Deseja realmente excluir o produto " + produto + "?');";
              
            }
        }
   
    }
}